<!-- 结束问诊 -->
<template>
  <div>
    <ToolbarItemContainer
      :iconFile="Icon"
      title="结束问诊"
      :needBottomPopup="true"
      :iconWidth="isUniFrameWork ? '26px' : '20px'"
      :iconHeight="isUniFrameWork ? '26px' : '20px'"
      :needDialog="false"
      @onIconClick="onIconClick"
      ref="container"
    />
  </div>
</template>
<script setup lang="ts">
import {
  TUIChatService,
  TUIStore,
  StoreName,
  IConversationModel,
  TUIGroupService,
} from '@tencentcloud/chat-uikit-engine'
import { ref } from '@/TUIKit/adapter-vue'
import ToolbarItemContainer from '@/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/index.vue'
import { isPC, isUniFrameWork } from '@/TUIKit/utils/env'
import Icon from '@/TUIWidget/static/icon/close.png'
import {
  endOutpatientInfo,
  getOutpatientInfo,
  getPrescriptionInfo,
  getConsultationInfo,
  getConsultationAdvice,
} from '@/api/ConsultationRoom'

const currentConversation = ref<IConversationModel>()
const container = ref()

TUIStore.watch(StoreName.CONV, {
  currentConversation: (conversation: IConversationModel) => {
    currentConversation.value = conversation
  },
})

console.warn('>>>>>>>>>>>>>>>>>>>>>>> currentConversation', currentConversation.value)

// UI 层监听当前更新通知
const chatType = ref<string>('')
const consultation = ref<object>({})
let onCurrentGroupUpdated = function (currentGroup) {
  if (!currentGroup?.groupCustomField) return

  // 设置会话自定义字段
  chatType.value = currentGroup.groupCustomField.find(
    (item: any) => item.key === 'diagnosis_type'
  ).value
  // 设置会诊详情
  consultation.value = JSON.parse(
    currentGroup.groupCustomField.find((item: any) => item.key === 'consultation').value || 0
  )
}

// 监听当前会话ID更新
TUIStore.watch(StoreName.GRP, {
  currentGroup: onCurrentGroupUpdated,
})
// 获取问诊详情
const GetOutpatientInfo = async id => {
  const { data } = await getOutpatientInfo({ id })
  return data
}
// 获取会诊详情
const GetConsultationInfo = async id => {
  const { data } = await getConsultationInfo({ id })
  return data
}

// 获取问诊建议
const GetConsultationAdvice = async id => {
  const { data } = await getConsultationAdvice({ id })
  return data
}
// 获取处方信息
const GetPrescriptionInfo = async id => {
  const { data } = await getPrescriptionInfo({ id })
  return data
}

/**
 * 点击事件
 */
const onIconClick = async () => {
  console.log(`-- 结束${chatType.value}(删除群组和会话) ---------------->`)

  // 设置视频时间
  let msg_1 = {
    businessID: 'tip',
    type: 'card',
    title: '设置视频时间',
    text: '为保证视频问诊的顺畅，请医生提前设置视频时间以告知用户',
    buttonText: '去设置时间',
    buttonUrl: '/pages/ConsultationRoom/Prescription/Prescription',
  }
  // 视频通话录像
  let msg_2 = {
    businessID: 'tip',
    type: 'card',
    title: '视频通话录像',
    text: '于2024.5.21 13:00开始至2024.05.21 13:10结束共计视频通话时长10分钟',
    buttonText: '查看录像',
    buttonUrl: '/pages/ConsultationRoom/Prescription/Prescription',
  }
  // 处方笺
  let msg_3 = {
    type: 'card',
    title: '处方笺',
    text: '医生已为您推荐了会诊服务的医生，点击即可缴费会诊服务的医生，会诊服务的医生，会诊服务的.......',
    buttonText: '去查看',
    buttonUrl: '/pages/ConsultationRoom/PrescriptionDetails/PrescriptionDetails',
  }
  // 会诊服务
  let msg_4 = {
    businessID: 'tip',
    type: 'card',
    title: '会诊服务',
    text: '医生已为您推荐了会诊服务的医生，点击即可缴费会诊服务的医生，会诊服务的医生，会诊服务的.......',
    buttonText: '去查看',
    buttonUrl: '/pages/ConsultationRoom/Prescription/Prescription',
  }
  // 问诊建议
  let msg_5 = {
    businessID: 'tip',
    type: 'card',
    title: '问诊建议',
    text: '初步诊断是确定疼痛症状原因的关键步骤。通过疼痛问诊的要点详细的询问疼痛特征、了解个人病史......',
    buttonText: '去查看',
    buttonUrl: '/pages/ConsultationRoom/proposal/proposal',
  }

  // // 发送自定义消息
  // let promise = TUIChatService.sendCustomMessage({
  //   payload: {
  //     data: JSON.stringify(msg_5),
  //     description: '',
  //   },
  // })
  // promise.catch(error => {
  //   // 调用异常时业务侧可以通过 promise.catch 捕获异常进行错误处理
  // })

  // 解散群组
  const deleteGroup = async () => {
    uni.showModal({
      title: `结束${chatType.value}`,
      content: '结束后将解散当前群组，是否继续？',
      success: function (res) {
        if (res.confirm) {
          // 解散群组
          TUIGroupService.dismissGroup(currentConversation.value?.groupProfile?.groupID)
            .then(res => {
              // 删除会话
              TUIStore.getConversationModel(currentConversation.value.conversationID)
                .deleteConversation()
                .catch(error => {
                  console.log('error', error)
                })

              // 结束问诊
              endOutpatientInfo({
                id: consultation.value.id,
              }).then(res => {
                uni.showToast({
                  title: '操作成功',
                  duration: 200,
                  icon: 'none',
                  mask: true,
                })
              })

              if (chatType.value == '会诊') {
                uni.reLaunch({
                  url: '/pages/ConsultationRoom/consultationList/consultationList',
                })
              } else {
                uni.reLaunch({
                  url: '/pages/ConsultationRoom/index?type=1',
                })
              }
            })
            .catch(error => {
              console.log('error', error)
            })
        } else if (res.cancel) {
          console.log('用户点击取消')
        }
      },
    })
  }

  /**
   * 会诊
   */
  if (chatType.value == '会诊') {
    // 获取会诊详情(用于判断是否完成了必要操作)
    const consultationInfo = await GetConsultationInfo(consultation.value.id)
    console.log('consultationInfo', consultationInfo)

    // 判断是否完成了 结束会诊前必须给出: 1)会诊结论; 2)开具处方、退费, 结束会诊这个只有发起人有这个按钮操作和限制
    if (!consultationInfo.conclusion) {
      console.log('结束会诊前必须给出: 会诊结论')
      uni.showModal({
        title: `提示`,
        content: `提示暂未为该用户的此次问诊提供 【会诊结论】 ，当前问诊暂不支持结束`,
        confirmText: '会诊结论',
        cancelText: '关闭',
        success: function (res) {
          if (res.confirm) {
            console.log('用户点击确定')

            uni.navigateTo({
              url: `/pages/ConsultationRoom/ConsultationForm/ConsultationForm?id=${consultation.value.id}`,
            })
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        },
      })
      return
    } else {
      uni.showModal({
        title: `结束会诊`,
        content: `确定结束当前用户的会诊吗？`,
        confirmText: '确定',
        cancelText: '取消',
        success: function (res) {
          if (res.confirm) {
            console.log('用户点击确定')

            // 解散群组
            deleteGroup()
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        },
      })
      return
    }
  }

  /**
   * 问诊
   */
  if (chatType.value == '问诊') {
    // 获取会诊详情(用于判断是否完成了必要操作)
    const outpatientInfo = await GetOutpatientInfo(consultation.value.id)
    console.log('outpatientInfo', outpatientInfo)
    // 问诊建议
    // const consultationAdvice = await GetConsultationAdvice(consultation.value.id)
    // console.log('consultationAdvice', consultationAdvice)

    // 判断是否完成了 开出处方和维护病历
    // 判断1是否有病历（有二次确认结束，无判断2）
    // 判断2是否有问诊建议（有二次确认结束、无提示填写问诊建议）
    if (
      !outpatientInfo.prescriptionId &&
      !outpatientInfo.medicalRecordId &&
      !outpatientInfo.consultationAdviceRespVO
    ) {
      console.log('未开出处方和维护病历(请完成问诊建议)')
      uni.showModal({
        title: `提示`,
        content: `提示暂未为该用户的此次问诊提供 【问诊建议】 ，当前问诊暂不支持结束`,
        confirmText: '问诊建议',
        cancelText: '关闭',
        success: function (res) {
          if (res.confirm) {
            console.log('用户点击确定')

            uni.navigateTo({
              url: `/pages/ConsultationRoom/proposal/proposal?id=${consultation.value.id}`,
            })
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        },
      })
      return
    } else {
      uni.showModal({
        title: `结束问诊`,
        content: `确定结束当前用户的问诊吗？`,
        confirmText: '确定',
        cancelText: '取消',
        success: function (res) {
          if (res.confirm) {
            console.log('用户点击确定')

            // 解散群组
            deleteGroup()
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        },
      })
      return
    }

    // 测试用
    // uni.showModal({
    //   title: `结束问诊`,
    //   content: `确定结束当前用户的问诊吗？`,
    //   confirmText: '确定',
    //   cancelText: '取消',
    //   success: function (res) {
    //     if (res.confirm) {
    //       console.log('用户点击确定')

    //       // 解散群组
    //       deleteGroup()
    //     } else if (res.cancel) {
    //       console.log('用户点击取消')
    //     }
    //   },
    // })
  }
}
</script>
<style scoped lang="scss" src="./style/index.scss"></style>
